Skip to content

Refactor the JSON-RPC cache and handling of legacy API subscriptions#854

Merged
tomaka merged 46 commits intoparitytech:mainfrom
tomaka:legacy-rpc-task
Jul 6, 2023
Merged

Refactor the JSON-RPC cache and handling of legacy API subscriptions#854
tomaka merged 46 commits intoparitytech:mainfrom
tomaka:legacy-rpc-task

Conversation

@tomaka
Copy link
Copy Markdown
Contributor

@tomaka tomaka commented Jul 5, 2023

This PR refactors the way the subscriptions (all heads, new heads, finalized heads, runtime version, and storage) of the legacy API are handled.

A task dedicated to this is now spawned in the background, and all these subscriptions now send a message to said task.
This task is also subscribed against the runtime service and propagates the blocks that the runtime service notifies to the JSON-RPC client.

This means that notifications are now sent in a precise order. In particular, a runtime version change is now sent immediately after a best block change when relevant. While this is not something the JSON-RPC client can rely upon, it is more clean to do this nonetheless.

When it comes to storage subscriptions, a side change is that all the keys of all the storage requests are now merged together into one network request. This change doesn't make things particularly faster, but is necessary before #779 can land.

This new task now completely owns the content of the Cache (previously a field in Background).
In order to access the cache, one can send a message to the task rather than lock a mutex. In general I'd like to avoid mutexes in order to be able to guarantee a lack of deadlocks.

While the diff is pretty large, every commit is straight forward, and I'm very confident in the fact that the code works at least as well as before this PR.

tomaka added 30 commits July 4, 2023 08:58
@tomaka tomaka added this pull request to the merge queue Jul 6, 2023
Merged via the queue into paritytech:main with commit e97f1d3 Jul 6, 2023
@tomaka tomaka deleted the legacy-rpc-task branch July 6, 2023 06:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant